6/21/05 - Ling Nero (rnlnero@yahoo.com)
- Added Routes, Icons, & Tracks support
- Fixed waypoint date/time stamp conversion
+ 02/09/08 - oliskoli
+ - gbfile API
+ - check for buffer overflows when reading names or comments
*/
#include <math.h> /* for lat/lon conversion */
typedef struct lowranceusr_icon_mapping {
- const long int value;
- const char *icon;
+ const int value;
+ const char *icon;
} lowranceusr_icon_mapping_t;
#define DEF_ICON 10001
{ -1, NULL }
};
-static FILE *file_in;
-static FILE *file_out;
+static gbfile *file_in;
+static gbfile *file_out;
static short_handle mkshort_handle;
static unsigned short waypt_out_count;
/* Jan 1, 2000 00:00:00 */
const time_t base_time_secs = 946706400;
-static
-size_t
-my_fwrite4(int *ptr, FILE *stream)
+static int
+lowranceusr_readstr(char *buf, const int maxlen, gbfile *file)
{
- int i = le_read32(ptr);
- return fwrite(&i, 4, 1, stream);
-}
+ int org, len;
+
+ org = len = gbfgetint32(file);
+ if (len < 0) fatal(MYNAME ": Invalid item length (%d)!\n", len);
+ else if (len) {
+ if (len > maxlen) len = maxlen;
+ (void) gbfread(buf, 1, len, file);
+ if (org > maxlen) (void) gbfseek(file, org - maxlen, SEEK_CUR);
+ }
-static
-size_t
-my_fwrite2(short *ptr, FILE *stream)
-{
- short i = le_read16(ptr);
- return fwrite(&i, 2, 1, stream);
+ return len;
}
const char *
return "";
}
-long int
+int
lowranceusr_find_icon_number_from_desc(const char *desc)
{
const lowranceusr_icon_mapping_t *i;
return DEF_ICON;
}
-static int
-lowranceusr_fread(void *buff, size_t size, size_t members, FILE * fp)
-{
- size_t br;
-
- br = fread(buff, size, members, fp);
-
- if (br != members) {
- fatal(MYNAME ": requested to read %lu bytes, read %lu bytes.\n",
- (unsigned long) members, (unsigned long) br);
- }
-
- return (br);
-}
static
arglist_t lowranceusr_args[] = {
static void
rd_init(const char *fname)
{
- file_in = xfopen(fname, "rb", MYNAME);
+ file_in = gbfopen_le(fname, "rb", MYNAME);
}
static void
rd_deinit(void)
{
- fclose(file_in);
+ gbfclose(file_in);
}
static void
wr_init(const char *fname)
{
- file_out = xfopen(fname, "wb", MYNAME);
+ file_out = gbfopen_le(fname, "wb", MYNAME);
mkshort_handle = mkshort_new_handle();
waypt_out_count = 0;
}
static void
wr_deinit(void)
{
- fclose(file_out);
+ gbfclose(file_out);
mkshort_del_handle(&mkshort_handle);
}
lowranceusr_parse_waypt(waypoint *wpt_tmp)
{
char buff[MAXUSRSTRINGSIZE + 1];
- long int TextLen;
+ int text_len;
time_t waypt_time;
short waypt_type;
- lowranceusr_fread(&buff[0], 4, 1, file_in);
- wpt_tmp->latitude = lat_mm_to_deg(le_read32(&buff[0]));
- lowranceusr_fread(&buff[0], 4, 1, file_in);
- wpt_tmp->longitude = lon_mm_to_deg(le_read32(&buff[0]));
- lowranceusr_fread(&buff[0], 4, 1, file_in);
- wpt_tmp->altitude = FEET_TO_METERS(le_read32(&buff[0]));
+ wpt_tmp->latitude = lat_mm_to_deg(gbfgetint32(file_in));
+ wpt_tmp->longitude = lon_mm_to_deg(gbfgetint32(file_in));
+ wpt_tmp->altitude = FEET_TO_METERS(gbfgetint32(file_in));
if (wpt_tmp->altitude <= UNKNOWN_USR_ALTITUDE) {
wpt_tmp->altitude = unknown_alt;
}
- lowranceusr_fread(&buff[0], 4, 1, file_in);
- TextLen = buff[0];
- if (TextLen)
- lowranceusr_fread(&buff[0], TextLen, 1, file_in);
- buff[TextLen] = '\0';
- wpt_tmp->shortname = xstrdup(buff);
-
- if (global_opts.debug_level >= 1)
- printf("LOWRANCE parse_waypt: Waypt name = %s Lat = %f Lon = %f alt = %f\n",wpt_tmp->shortname, wpt_tmp->latitude,
+ text_len = lowranceusr_readstr(&buff[0], MAXUSRSTRINGSIZE, file_in);
+ if (text_len) {
+ buff[text_len] = '\0';
+ wpt_tmp->shortname = xstrdup(buff);
+ }
+
+ if (global_opts.debug_level >= 1)
+ printf(MYNAME " parse_waypt: Waypt name = %s Lat = %f Lon = %f alt = %f\n",wpt_tmp->shortname, wpt_tmp->latitude,
wpt_tmp->longitude, wpt_tmp->altitude);
- lowranceusr_fread(&buff[0], 4, 1, file_in);
- TextLen = buff[0];
- if (TextLen) {
- lowranceusr_fread(&buff[0], TextLen, 1, file_in);
- buff[TextLen] = '\0';
+ text_len = lowranceusr_readstr(&buff[0], MAXUSRSTRINGSIZE, file_in);
+ if (text_len) {
+ buff[text_len] = '\0';
wpt_tmp->description = xstrdup(buff);
}
- lowranceusr_fread(&buff[0], 4, 1, file_in);
/* Time is number of seconds since Jan. 1, 2000 */
- waypt_time = le_read32(&buff[0]);
+ waypt_time = gbfgetint32(file_in);
if (waypt_time)
wpt_tmp->creation_time = base_time_secs + waypt_time;
- if (global_opts.debug_level >= 2)
+ if (global_opts.debug_level >= 2)
{
- printf("LOWRANCE parse_waypt: creation time %d\n",
+ printf(MYNAME " parse_waypt: creation time %d\n",
(int)wpt_tmp->creation_time);
- printf("LOWRANCE parse_waypt: base_time %d\n", (int)base_time_secs);
- printf("LOWRANCE parse_waypt: waypt time %d\n", (int)waypt_time);
+ printf(MYNAME " parse_waypt: base_time %d\n", (int)base_time_secs);
+ printf(MYNAME " parse_waypt: waypt time %d\n", (int)waypt_time);
}
/* Symbol ID */
- lowranceusr_fread(&buff[0], 4, 1, file_in);
- wpt_tmp->icon_descr = lowranceusr_find_desc_from_icon_number(le_read32(&buff[0]));
+ wpt_tmp->icon_descr = lowranceusr_find_desc_from_icon_number(gbfgetint32(file_in));
if (!wpt_tmp->icon_descr[0]) {
char nbuf[10];
snprintf(nbuf, sizeof(nbuf), "%d", le_read32(buff));
}
/* Waypoint Type (USER, TEMPORARY, POINT_OF_INTEREST) */
- lowranceusr_fread(&buff[0], 2, 1, file_in);
- waypt_type = le_read16(&buff[0]);
- if (global_opts.debug_level >= 1)
- printf("LOWRANCEUSR parse_waypt: waypt_type = %d\n",waypt_type);
+ waypt_type = gbfgetint16(file_in);
+ if (global_opts.debug_level >= 1)
+ printf(MYNAME " parse_waypt: waypt_type = %d\n",waypt_type);
}
char buff[MAXUSRSTRINGSIZE + 1];
short int num_routes, num_legs;
int i,j;
- long int text_len;
+ int text_len;
waypoint *wpt_tmp;
- lowranceusr_fread(&buff[0], 2, 1, file_in);
- num_routes = le_read16(&buff[0]);
+ num_routes = gbfgetint16(file_in);
- if (global_opts.debug_level >= 1)
- printf("LOWRANCAE parse_routes: Num Routes = %d\n", num_routes);
+ if (global_opts.debug_level >= 1)
+ printf(MYNAME " parse_routes: Num Routes = %d\n", num_routes);
for (i=0; i < num_routes; i++)
{
rte_head->rte_num = i+1;
/* route name */
- lowranceusr_fread(&buff[0], 4, 1, file_in);
- text_len = buff[0];
+ text_len = lowranceusr_readstr(&buff[0], MAXUSRSTRINGSIZE, file_in);
if (text_len)
{
- lowranceusr_fread(&buff[0], text_len, 1, file_in);
buff[text_len] = '\0';
+ rte_head->rte_name = xstrdup(buff);
}
- rte_head->rte_name = xstrdup(buff);
- rte_head->rte_desc = '\0';
+ rte_head->rte_desc = '\0'; /* ???????? */
/* num Legs */
- lowranceusr_fread(&buff[0], 2, 1, file_in);
- num_legs = le_read16(&buff[0]);
+ num_legs = gbfgetint16(file_in);
/* route reversed */
- lowranceusr_fread(&buff[0], 1, 1, file_in);
+ (void) gbfread(&buff[0], 1, 1, file_in);
/* waypoints */
for (j=0; j < num_legs; j++)
short int num_icons;
int i;
- lowranceusr_fread(&buff[0], 2, 1, file_in);
- num_icons = le_read16(&buff[0]);
+ num_icons = gbfgetint16(file_in);
- if (global_opts.debug_level >= 1)
- printf("LOWRANCE parse_icons: num Icons = %d\n", num_icons);
+ if (global_opts.debug_level >= 1)
+ printf(MYNAME " parse_icons: num Icons = %d\n", num_icons);
for (i=0; i < num_icons; i++)
{
if (ignoreicons)
{
/* position coord lat & long */
- lowranceusr_fread(&buff[0], 4, 2, file_in);
+ (void) gbfread(&buff[0], 4, 2, file_in);
/* symbol */
- lowranceusr_fread(&buff[0], 4, 1, file_in);
+ (void) gbfread(&buff[0], 4, 1, file_in);
}
else
{
wpt_tmp = waypt_new();
/* position coord lat & long */
- lowranceusr_fread(&buff[0], 4, 1, file_in);
- wpt_tmp->latitude = lat_mm_to_deg(le_read32(&buff[0]));
- lowranceusr_fread(&buff[0], 4, 1, file_in);
- wpt_tmp->longitude = lon_mm_to_deg(le_read32(&buff[0]));
+ wpt_tmp->latitude = lat_mm_to_deg(gbfgetint32(file_in));
+ wpt_tmp->longitude = lon_mm_to_deg(gbfgetint32(file_in));
wpt_tmp->altitude = 0;
- sprintf(buff,"Icon %d", i+1);
+ snprintf(buff, sizeof(buff), "Icon %d", i+1);
wpt_tmp->shortname = xstrdup(buff);
/* symbol */
- lowranceusr_fread(&buff[0], 4, 1, file_in);
- wpt_tmp->icon_descr = lowranceusr_find_desc_from_icon_number(le_read32(&buff[0]));
+ wpt_tmp->icon_descr = lowranceusr_find_desc_from_icon_number(gbfgetint32(file_in));
waypt_add(wpt_tmp);
}
}
{
char buff[MAXUSRSTRINGSIZE + 1];
short int num_trails, num_trail_points, num_section_points;
- int i,j, trk_num;
- long int text_len;
+ int i,j, trk_num, itmp;
+ int text_len;
waypoint *wpt_tmp;
route_head *trk_tmp;
/* num trails */
- lowranceusr_fread(&buff[0], 2, 1, file_in);
- num_trails = le_read16(&buff[0]);
+ num_trails = gbfgetint16(file_in);
- if (global_opts.debug_level >= 1)
- printf("LOWRANCE parse_trails: num trails = %d\n", num_trails);
+ if (global_opts.debug_level >= 1)
+ printf(MYNAME " parse_trails: num trails = %d\n", num_trails);
for (i=trk_num=0; i < num_trails; i++)
{
track_add_head(trk_head);
/* trail name */
- lowranceusr_fread(&buff[0], 4, 1, file_in);
- text_len = buff[0];
-
-if (global_opts.debug_level >= 1)
- printf("LOWRANCE parse_trails: name text len = %ld\n", text_len);
+ text_len = lowranceusr_readstr(&buff[0], MAXUSRSTRINGSIZE, file_in);
- if (text_len)
- lowranceusr_fread(&buff[0], text_len, 1, file_in);
+ if (global_opts.debug_level >= 1)
+ printf(MYNAME " parse_trails: name text len = %d\n", text_len);
- buff[text_len] = '\0';
- trk_head->rte_name = xstrdup(buff);
+ if (text_len) {
+ buff[text_len] = '\0';
+ trk_head->rte_name = xstrdup(buff);
+ }
trk_head->rte_desc = '\0';
-if (global_opts.debug_level >= 1)
- printf("LOWRANCE parse_trails: trail name = %s\n", trk_head->rte_name);
+ if (global_opts.debug_level >= 1)
+ printf(MYNAME " parse_trails: trail name = %s\n", trk_head->rte_name);
/* visible */
- lowranceusr_fread(&buff[0], 1, 1, file_in);
+ (void) gbfread(&buff[0], 1, 1, file_in);
/* num trail points */
- lowranceusr_fread(&buff[0], 2, 1, file_in);
- num_trail_points = le_read16(&buff[0]);
+ num_trail_points = gbfgetint16(file_in);
-if (global_opts.debug_level >= 1)
- printf("LOWRANCE parse_trails: num trail points = %d\n", num_trail_points);
+ if (global_opts.debug_level >= 1)
+ printf(MYNAME " parse_trails: num trail points = %d\n", num_trail_points);
/* max trail size */
- lowranceusr_fread(&buff[0], 2, 1, file_in);
+ itmp = gbfgetint16(file_in);
-if (global_opts.debug_level >= 1)
- printf("LOWRANCE parse_trails: max trail size = %d\n", le_read16(&buff[0]));
+ if (global_opts.debug_level >= 1)
+ printf(MYNAME " parse_trails: max trail size = %d\n", itmp);
if (num_trail_points)
{
while (num_trail_points)
{
/* num section points */
- lowranceusr_fread(&buff[0], 2, 1, file_in);
- num_section_points = le_read16(&buff[0]);
+ num_section_points = gbfgetint16(file_in);
-if (global_opts.debug_level >= 1)
- printf("LOWRANCE parse_trails: num section points = %d\n", num_section_points);
+ if (global_opts.debug_level >= 1)
+ printf(MYNAME " parse_trails: num section points = %d\n", num_section_points);
for (j=0; j < num_section_points; j++, num_trail_points--)
{
- wpt_tmp = waypt_new();
- lowranceusr_fread(&buff[0], 4, 1, file_in);
- wpt_tmp->latitude = lat_mm_to_deg(le_read32(&buff[0]));
- lowranceusr_fread(&buff[0], 4, 1, file_in);
- wpt_tmp->longitude = lon_mm_to_deg(le_read32(&buff[0]));
- /* continuous */
- lowranceusr_fread(&buff[0], 1, 1, file_in);
- if (!buff[0] && seg_break && j)
- {
- trk_tmp = route_head_alloc();
- trk_tmp->rte_num = ++trk_num;
- trk_tmp->rte_name = xstrdup(trk_head->rte_name);
- trk_tmp->rte_desc = '\0';
- track_add_head(trk_tmp);
- trk_head = trk_tmp;
- }
- track_add_wpt(trk_head, wpt_tmp);
+ wpt_tmp = waypt_new();
+ wpt_tmp->latitude = lat_mm_to_deg(gbfgetint32(file_in));
+ wpt_tmp->longitude = lon_mm_to_deg(gbfgetint32(file_in));
+ /* continuous */
+ (void) gbfread(&buff[0], 1, 1, file_in);
+ if (!buff[0] && seg_break && j)
+ {
+ trk_tmp = route_head_alloc();
+ trk_tmp->rte_num = ++trk_num;
+ trk_tmp->rte_name = xstrdup(trk_head->rte_name);
+ trk_tmp->rte_desc = '\0';
+ track_add_head(trk_tmp);
+ trk_head = trk_tmp;
+ }
+ track_add_wpt(trk_head, wpt_tmp);
-if (global_opts.debug_level >= 1)
- printf("LOWRANCE parse_trails: Trail pt lat %f lon %f\n", wpt_tmp->latitude, wpt_tmp->longitude);
+ if (global_opts.debug_level >= 1)
+ printf(MYNAME " parse_trails: Trail pt lat %f lon %f\n", wpt_tmp->latitude, wpt_tmp->longitude);
}
}
}
static void
data_read(void)
{
- char buff[MAXUSRSTRINGSIZE + 1];
short int NumWaypoints, MajorVersion, MinorVersion, object_num;
int i;
- lowranceusr_fread(&buff[0], 2, 1, file_in);
- MajorVersion = le_read16(&buff[0]);
- lowranceusr_fread(&buff[0], 2, 1, file_in);
- MinorVersion = le_read16(&buff[0]);
+ MajorVersion = gbfgetint16(file_in);
+ MinorVersion = gbfgetint16(file_in);
if (global_opts.debug_level >= 1)
- printf("LOWRANCE data_read: Major Version %d Minor Version %d\n", MajorVersion, MinorVersion);
+ printf(MYNAME " data_read: Major Version %d Minor Version %d\n", MajorVersion, MinorVersion);
if (MajorVersion < 2) {
fatal(MYNAME ": input file is from an old version of the USR file and is not supported\n");
}
- lowranceusr_fread(&buff[0], 2, 1, file_in);
- NumWaypoints = le_read16(&buff[0]);
+ NumWaypoints = gbfgetint16(file_in);
- if (global_opts.debug_level >= 1)
- printf("LOWRANCE data_read: Num waypoints %d\n", NumWaypoints);
+ if (global_opts.debug_level >= 1)
+ printf(MYNAME " data_read: Num waypoints %d\n", NumWaypoints);
for (i = 0; i < NumWaypoints; i++) {
waypoint *wpt_tmp;
wpt_tmp = waypt_new();
/* Object num */
- lowranceusr_fread(&buff[0], 2, 1, file_in);
- object_num = le_read16(&buff[0]);
+ object_num = gbfgetint16(file_in);
if (global_opts.debug_level >= 1)
- printf("LOWRANCE data_read: object_num = %d\n", object_num);
+ printf(MYNAME " data_read: object_num = %d\n", object_num);
/* waypoint */
lowranceusr_parse_waypt(wpt_tmp);
static void
lowranceusr_waypt_disp(const waypoint *wpt)
{
- int TextLen, Lat, Lon, Time, SymbolId;
+ int text_len, Lat, Lon, Time, SymbolId;
short int WayptType;
char *name;
char *comment;
}
Lat = lat_deg_to_mm(wpt->latitude);
- my_fwrite4(&Lat, file_out);
Lon = lon_deg_to_mm(wpt->longitude);
- my_fwrite4(&Lon, file_out);
- my_fwrite4(&alt, file_out);
+ gbfputint32(Lat, file_out);
+ gbfputint32(Lon, file_out);
+ gbfputint32(alt, file_out);
- if (global_opts.debug_level >= 1)
- printf("LOWRANCE waypt_disp: Lat = %d\nLon = %d\nAlt = %d\n",Lat, Lon, alt);
+ if (global_opts.debug_level >= 1)
+ printf(MYNAME " waypt_disp: Lat = %d\nLon = %d\nAlt = %d\n",Lat, Lon, alt);
/* Try and make sure we have a name */
if ((! wpt->shortname) || global_opts.synthesize_shortnames) {
name = xstrdup(wpt->shortname);
}
- TextLen = strlen(name);
- my_fwrite4(&TextLen, file_out);
- fwrite(name, 1, TextLen, file_out);
+ text_len = strlen(name);
+ if (text_len > MAXUSRSTRINGSIZE) text_len = MAXUSRSTRINGSIZE;
+ gbfputint32(text_len, file_out);
+ gbfwrite(name, 1, text_len, file_out);
- if (global_opts.debug_level >= 1)
- printf("LOWRANCE waypt_disp: Waypt name = %s\n",name);
+ if (global_opts.debug_level >= 1)
+ printf(MYNAME " waypt_disp: Waypt name = %s\n",name);
xfree(name);
*/
if (wpt->description && strcmp(wpt->description, wpt->shortname) != 0) {
comment = xstrdup(wpt->description);
- TextLen = strlen(comment);
- my_fwrite4(&TextLen, file_out);
- fwrite(comment, 1, TextLen, file_out);
+ text_len = strlen(comment);
+ if (text_len > MAXUSRSTRINGSIZE) text_len = MAXUSRSTRINGSIZE;
+ gbfputint32(text_len, file_out);
+ gbfwrite(comment, 1, text_len, file_out);
xfree(comment);
} else {
- TextLen = 0;
- my_fwrite4(&TextLen, file_out);
+ text_len = 0;
+ gbfputint32(text_len, file_out);
}
if (wpt->creation_time > base_time_secs) {
Time = 0;
}
- if (global_opts.debug_level >= 2)
+ if (global_opts.debug_level >= 2)
{
time_t wpt_time = Time;
- printf("LOWRANCE waypt_disp: base_time : %d\n", (int)base_time_secs);
- printf("LOWRANCE waypt_disp: creation time : %d\n", (int)wpt->creation_time);
- printf("LOWRANCE waypt_disp: waypt time : %d\n", (int)wpt_time);
- printf("LOWRANCE waypt_disp: waypt time (local): %s\n", ctime(&wpt_time));
+ printf(MYNAME " waypt_disp: base_time : %d\n", (int)base_time_secs);
+ printf(MYNAME " waypt_disp: creation time : %d\n", (int)wpt->creation_time);
+ printf(MYNAME " waypt_disp: waypt time : %d\n", (int)wpt_time);
+ printf(MYNAME " waypt_disp: waypt time (local): %s\n", ctime(&wpt_time));
}
- my_fwrite4(&Time, file_out);
+ gbfputint32(Time, file_out);
if (get_cache_icon(wpt) && wpt->icon_descr && (strcmp(wpt->icon_descr, "Geocache Found") != 0)) {
SymbolId = lowranceusr_find_icon_number_from_desc(get_cache_icon(wpt));
SymbolId = lowranceusr_find_icon_number_from_desc(wpt->icon_descr);
}
- my_fwrite4(&SymbolId, file_out);
+ gbfputint32(SymbolId, file_out);
/* USER waypoint type */
WayptType = 0;
- my_fwrite2(&WayptType, file_out);
+ gbfputint16(WayptType, file_out);
}
static void
{
/* our personal waypoint counter */
- my_fwrite2((short *) &waypt_out_count, file_out);
+ gbfputint16(waypt_out_count, file_out);
- if (global_opts.debug_level >= 1)
- printf("LOWRANCE waypt_pr: waypoint #%d ",waypt_out_count);
+ if (global_opts.debug_level >= 1)
+ printf(MYNAME " waypt_pr: waypoint #%d ",waypt_out_count);
waypt_out_count++;
lowranceusr_find_icon_number_from_desc(wpt->icon_descr) :
10003;
- my_fwrite4(&latmm, file_out);
- my_fwrite4(&lonmm, file_out);
- my_fwrite4(&icon, file_out);
+ gbfputint32(latmm, file_out);
+ gbfputint32(lonmm, file_out);
+ gbfputint32(icon, file_out);
}
/*
} else
{
tmp_name[0]='\0';
- sprintf(tmp_name, "Babel %d", trail_count);
+ snprintf(tmp_name, sizeof(tmp_name), "Babel %d", trail_count);
name = xstrdup(tmp_name);
}
text_len = strlen(name);
- if (global_opts.debug_level >= 1)
- printf("LOWRANCE track_hdr: trail name text len = %d\n", text_len);
- my_fwrite4(&text_len, file_out);
+ if (text_len > MAXUSRSTRINGSIZE) text_len = MAXUSRSTRINGSIZE;
+ if (global_opts.debug_level >= 1)
+ printf(MYNAME " track_hdr: trail name text len = %d\n", text_len);
+ gbfputint32(text_len, file_out);
- if (global_opts.debug_level >= 1)
- printf("LOWRANCE track_hdr: trail name = %s\n", name);
+ if (global_opts.debug_level >= 1)
+ printf(MYNAME " track_hdr: trail name = %s\n", name);
- fwrite(name, 1, text_len, file_out);
+ gbfwrite(name, 1, text_len, file_out);
num_trail_points = (short) trk->rte_waypt_ct;
max_trail_size = MAX_TRAIL_POINTS;
num_trail_points = max_trail_size;
num_section_points = num_trail_points;
- if (global_opts.debug_level >= 1)
- printf("LOWRANCE track_hdr: num_trail_points = %d\nmax_trail_size = %d\nnum_section_points = %d\n",
+ if (global_opts.debug_level >= 1)
+ printf(MYNAME " track_hdr: num_trail_points = %d\nmax_trail_size = %d\nnum_section_points = %d\n",
num_trail_points, max_trail_size, num_section_points);
- fwrite(&visible, 1, 1, file_out);
- my_fwrite2(&num_trail_points, file_out);
- my_fwrite2(&max_trail_size, file_out);
- my_fwrite2(&num_section_points, file_out);
+ gbfwrite(&visible, 1, 1, file_out);
+ gbfputint16(num_trail_points, file_out);
+ gbfputint16(max_trail_size, file_out);
+ gbfputint16(num_section_points, file_out);
xfree(name);
trail_point_count=1;
}
} else
{
tmp_name[0]='\0';
- sprintf(tmp_name, "Babel R%d", ++lowrance_route_count);
+ snprintf(tmp_name, sizeof(tmp_name), "Babel R%d", ++lowrance_route_count);
name = xstrdup(tmp_name);
}
text_len = strlen(name);
- my_fwrite4(&text_len, file_out);
- fwrite(name, 1, text_len, file_out);
+ if (text_len > MAXUSRSTRINGSIZE) text_len = MAXUSRSTRINGSIZE;
+ gbfputint32(text_len, file_out);
+ gbfwrite(name, 1, text_len, file_out);
xfree(name);
/* num legs */
num_legs = (short) rte->rte_waypt_ct;
- my_fwrite2(&num_legs, file_out);
- fwrite(&route_reversed, 1, 1, file_out);
+ gbfputint16(num_legs, file_out);
+ gbfwrite(&route_reversed, 1, 1, file_out);
- if (global_opts.debug_level >= 1)
- printf("LOWRANCE route_hdr: route name \"%s\" num_legs = %d\n",
+ if (global_opts.debug_level >= 1)
+ printf(MYNAME " route_hdr: route name \"%s\" num_legs = %d\n",
rte->rte_name, num_legs);
}
lat = lat_deg_to_mm(wpt->latitude);
lon = lon_deg_to_mm(wpt->longitude);
- if (global_opts.debug_level >= 1)
- printf("LOWRANCE track_disp: Trail point #%d lat = %d long = %d\n",trail_point_count, lat, lon);
+ if (global_opts.debug_level >= 1)
+ printf(MYNAME " track_disp: Trail point #%d lat = %d long = %d\n",trail_point_count, lat, lon);
- my_fwrite4(&lat, file_out);
- my_fwrite4(&lon, file_out);
- fwrite(&continuous, 1, 1, file_out);
+ gbfputint32(lat, file_out);
+ gbfputint32(lon, file_out);
+ gbfwrite(&continuous, 1, 1, file_out);
if (!continuous)
continuous = 1;
}
} else
{
tmp_name[0]='\0';
- sprintf(tmp_name, "Babel %d", trail_count);
+ snprintf(tmp_name, sizeof(tmp_name), "Babel %d", trail_count);
name = xstrdup(tmp_name);
}
text_len = strlen(name);
- my_fwrite4(&text_len, file_out);
+ if (text_len > MAXUSRSTRINGSIZE) text_len = MAXUSRSTRINGSIZE;
+ gbfputint32(text_len, file_out);
if (global_opts.debug_level >= 1)
- printf("LOWRANCE track_hdr: trail name = %s\n", name);
+ printf(MYNAME " track_hdr: trail name = %s\n", name);
- fwrite(name, 1, text_len, file_out);
+ gbfwrite(name, 1, text_len, file_out);
}
trail_point_count += (short) trk->rte_waypt_ct;
num_trail_points = max_trail_size;
num_section_points = num_trail_points;
- if (global_opts.debug_level >= 1)
- printf("LOWRANCE merge_track_tlr: num_trail_points = %d\nmax_trail_size = %d\nnum_section_points = %d\n",
- num_trail_points, max_trail_size, num_section_points);
+ if (global_opts.debug_level >= 1)
+ printf(MYNAME " merge_track_tlr: num_trail_points = %d\nmax_trail_size = %d\nnum_section_points = %d\n",
+ num_trail_points, max_trail_size, num_section_points);
- fwrite(&visible, 1, 1, file_out);
- my_fwrite2(&num_trail_points, file_out);
- my_fwrite2(&max_trail_size, file_out);
- my_fwrite2(&num_section_points, file_out);
+ gbfwrite(&visible, 1, 1, file_out);
+ gbfputint16(num_trail_points, file_out);
+ gbfputint16(max_trail_size, file_out);
+ gbfputint16(num_section_points, file_out);
}
}
static void
NumWaypoints = waypt_count();
- my_fwrite2(&MajorVersion, file_out);
- my_fwrite2(&MinorVersion, file_out);
+ gbfputint16(MajorVersion, file_out);
+ gbfputint16(MinorVersion, file_out);
- if (global_opts.debug_level >= 1)
- printf("LOWRANCE data_write: Num waypoints = %d\n", NumWaypoints);
+ if (global_opts.debug_level >= 1)
+ printf(MYNAME " data_write: Num waypoints = %d\n", NumWaypoints);
- if (writeasicons) {
- short zero = 0;
- my_fwrite2(&zero, file_out);
- } else {
- my_fwrite2(&NumWaypoints, file_out);
- waypt_disp_all(lowranceusr_waypt_pr);
- }
+ if (writeasicons) {
+ short zero = 0;
+ gbfputint16(zero, file_out);
+ } else {
+ gbfputint16(NumWaypoints, file_out);
+ waypt_disp_all(lowranceusr_waypt_pr);
+ }
- /* Route support added 6/21/05 */
- NumRoutes = route_count();
- my_fwrite2(&NumRoutes, file_out);
+ /* Route support added 6/21/05 */
+ NumRoutes = route_count();
+ gbfputint16(NumRoutes, file_out);
- if (global_opts.debug_level >= 1)
- printf("LOWRANCE data_write: Num routes = %d\n", NumRoutes);
+ if (global_opts.debug_level >= 1)
+ printf(MYNAME " data_write: Num routes = %d\n", NumRoutes);
if (NumRoutes)
{
}
if (NumWaypoints && writeasicons) {
- my_fwrite2(&NumWaypoints, file_out);
+ gbfputint16(NumWaypoints, file_out);
waypt_disp_all(lowranceusr_write_icon);
} else {
NumIcons = 0;
- my_fwrite2(&NumIcons, file_out);
+ gbfputint16(NumIcons, file_out);
}
/* Track support added 6/21/05 */
if (NumTrails && merge)
{
NumTrails = 1;
- my_fwrite2(&NumTrails, file_out);
+ gbfputint16(NumTrails, file_out);
trail_point_count = 0;
trail_count = 0;
/* count the number of total track points */
else
{
- my_fwrite2(&NumTrails, file_out);
+ gbfputint16(NumTrails, file_out);
if (global_opts.debug_level >= 1)
- printf("LOWRANCE data_write: Num tracks = %d\n", NumTrails);
+ printf(MYNAME " data_write: Num tracks = %d\n", NumTrails);
if (NumTrails)
{